/**************************************************************************************************
* Title: SumAxisAlignedBox.cpp
* Author: Gael Huber
* Description: An axis aligned bounding box
**************************************************************************************************/
#include "SumAxisAlignedBox.h"

/**************************************************************************************************
* Default constructor
**************************************************************************************************/
AxisAlignedBox::AxisAlignedBox(void)
{ }

/**************************************************************************************************
* Constructor given basic requirements
**************************************************************************************************/
AxisAlignedBox::AxisAlignedBox(const Vector3_16f& p, const Vector3_16f& s)
	: _position(p), _dimensions(s)
{ }
	
/**************************************************************************************************
* Copy constructor
**************************************************************************************************/
AxisAlignedBox::AxisAlignedBox(const AxisAlignedBox& rhs)
	: _position(rhs.position()), _dimensions(rhs.dimensions())
{ }

/**************************************************************************************************
* Destructor
**************************************************************************************************/
AxisAlignedBox::~AxisAlignedBox(void)
{ }

/**************************************************************************************************
* Assignment operator
**************************************************************************************************/
AxisAlignedBox& AxisAlignedBox::operator=(const AxisAlignedBox& rhs) {
	// Self-assignment guard
	if(this == &rhs)
		return *this;

	// Assign values
	_position = rhs.position();
	_dimensions = rhs.dimensions();
	return *this;
}

/**************************************************************************************************
* Equivalence operator
**************************************************************************************************/
bool AxisAlignedBox::operator==(const AxisAlignedBox& rhs) {
	return _position == rhs.position() && _dimensions == rhs.dimensions();
}

/**************************************************************************************************
* Non-equivalence operator
**************************************************************************************************/
bool AxisAlignedBox::operator!=(const AxisAlignedBox& rhs) {
	return _position != rhs.position() || _dimensions != rhs.dimensions();
}

/**************************************************************************************************
* Return position
**************************************************************************************************/
Vector3_16f& AxisAlignedBox::position(void) {
	return _position;
}

/**************************************************************************************************
* Return position
**************************************************************************************************/
const Vector3_16f& AxisAlignedBox::position(void) const {
	return _position;
}

/**************************************************************************************************
* Return dimensions
**************************************************************************************************/
Vector3_16f& AxisAlignedBox::dimensions(void) {
	return _dimensions;
}

/**************************************************************************************************
* Return dimensions
**************************************************************************************************/
const Vector3_16f& AxisAlignedBox::dimensions(void) const {
	return _dimensions;
}